﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kaskelot.SP.Model.Client;
using Kaskelot.SP.Model.Client.Forms;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;

namespace Kaskelot.SP.Services.Client.Mapping
{
	public static class ClientForsamlingExtensions
	{
		public static ClientForsamling ToClientContract(this Forsamling entity)
		{
			ClientForsamling b = new ClientForsamling();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static ClientForsamling ToMinimalClientContract(this Forsamling entity)
		{
			ClientForsamling b = new ClientForsamling();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static Forsamling ToContract(this ClientForsamling b)
		{
			Forsamling entity = new Forsamling();

			CopyToEntity(b, entity);

			return entity;
		}

		public static Forsamling UpdateContract(this Forsamling forsamling, ForsamlingForm form)
		{
			if (forsamling.Id == Guid.Empty)
			{
				forsamling.Id = Guid.NewGuid();
			}
			forsamling.Namn = form.Namn;
			forsamling.ValkretsId = new Guid(form.ValkretsId);
			forsamling.ForsamlingNr = form.ForsamlingNr;

			return forsamling;
		}

		private static void CopyFromEntity(Forsamling from, ClientForsamling to, bool minimal)
		{
			to.Id = from.Id.ToString();
			to.ValId = from.ValId.ToString();
			to.Namn = from.Namn;
			to.ValkretsId = from.ValkretsId.ToString();

			to.Andrad = from.Andrad != null ? from.Andrad.ToString() : null;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad != null ? from.Skapad.ToString() : null;
			to.SkapadAv = from.SkapadAv;

			to.ForsamlingNr = from.ForsamlingNr;

			if (minimal) return;

			if(from.Valkrets != null)
				to.Valkrets = from.Valkrets.ToMinimalClientContract();

			if (from.Valdistrikt != null)
			{
				to.Valdistrikt = new List<ClientValdistrikt>();
				foreach (Valdistrikt v in from.Valdistrikt)
				{
					to.Valdistrikt.Add(v.ToMinimalClientContract());
				}
			}
		}

		private static void CopyToEntity(ClientForsamling from, Forsamling to)
		{
			to.Id = new Guid(from.Id);
			to.ValId = new Guid(from.ValId);
			to.Namn = from.Namn;
			to.ValkretsId = new Guid(from.ValkretsId);

			to.ForsamlingNr = from.ForsamlingNr;

			if (!String.IsNullOrEmpty(from.Andrad))
				to.Andrad = DateTime.Parse(from.Andrad);
			else
				to.Andrad = null;

			to.AndradAv = from.AndradAv;

			if (from.Skapad != null)
				to.Skapad = DateTime.Parse(from.Skapad);

			to.SkapadAv = from.SkapadAv;
		}
	}
}
